local ClientOHOH = _G.ClientOHOH;

local M = ClientOHOH.class.new(script, ClientOHOH.files.OHOHOLYBUIBase());
local BtnHelper = ClientOHOH.load.BtnHelper();
local PlayerInfoHelper=_G.ClientOHOH.load.PlayerInfoHelper()

local CallBackManager = ClientOHOH.load.CallBackManager();

function InitInsts(ui)
	ui.insts = {};

	ui.insts.close ="ctrl.btn.colse"
    ui.insts.cellPerfab ="ctrl.cell"
    ui.insts.list ="ctrl.listFrame"
    ui.insts.UserIcon ="ctrl.UserIcon"
    ui.insts.UserName ="ctrl.UserName"

    ui.insts.normal={ --常规展示信息状态
        root="ctrl.btn.normal.root",
        equipBest ="ctrl.btn.normal.best",
        delete ="ctrl.btn.normal.delete",
        equip="ctrl.content.btn_equip", --装备按钮
        -- unEquip="ctrl.content.btn_equip", --装备按钮

    }
        

    ui.insts.delete={ --删除状态
        root="ctrl.btn.delete.root",
        cancel ="ctrl.btn.delete.cancel",
        delete ="ctrl.btn.delete.delete",
        num="ctrl.btn.delete.num",
        selectAll ="ctrl.btn.delete.selectAll",
    }


    -- ui.insts.merge={ --合成状态
    --     ShowBtn= "ctrl.content.btn_make",--显示合成
    --     cancel="ctrl.fuse.merg.cancel",-- 取消合成
    --     mergebtn="ctrl.fuse.merg.btn",--合成成功
    --   }

    
    ui.insts.BgColor={
        [1]="ctrl.color.Common",
        [2] ="ctrl.color.Epic",
        [3] ="ctrl.color.Legendary",
        [4]="ctrl.color.Omega",
        [5]="ctrl.color.Mythic",
        [6]="ctrl.color.Rare",
    }
end



function M.new(...)
	return M(...);
end;

function M.getBgColorByTitleId(self,id)
    return self.insts.BgColor[id]
end

function M.ctor(self)
	InitInsts(self)

    self.EquipBestEvent=_G.CommonOHOH.load.Connect().new()
    self.RemoveEvent=_G.CommonOHOH.load.Connect().new()
    -- self.MergeEvent=_G.CommonOHOH.load.Connect().new()
    self.EquipEvent=_G.CommonOHOH.load.Connect().new()



	M.super.ctor(self, ClientOHOH:GetPath_Loop("ReplicatedStorage.Resource.UI.WeaopnEquipGui"));

    self.numOldText= self.insts.delete.num.Text

    --列表对象
    self.ListUi=require(script.List).new(self.insts.list,self.insts.cellPerfab,self)
    --右侧显示信息对象
    self.InfoUi=require(script.Info).new(self) 

    self.insts.cellPerfab.Visible=false

    --关闭
    CallBackManager:AddRbxConnect(self,self.insts.close.Activated, function()
		self:Hide()
	end);


-----------------------------------操作接口----------------------------------------------
    -- self.insts.normal.equipBest.Visible=false
    -- self.insts.normal.delete.Visible=false
	--装备最佳
    CallBackManager:AddRbxConnect(self,self.insts.normal.equipBest.Activated, function()
        self.EquipBestEvent:Action()
	end);

    --触发删除
    CallBackManager:AddRbxConnect(self,self.insts.delete.delete.Activated, function()
         local data=self.ListUi:PullAllRemove()
         if data then
             self.RemoveEvent:Action(data)
             self:UpdateRemoveCount()

         end

	end);

    --装备某一把武器
    CallBackManager:AddRbxConnect(self,self.insts.normal.equip.Activated, function()

        local cell=self.InfoUi:GetSelectCell()
        if cell then
            -- print("---------- self.EquipEvent:Action(cell:GetData(),self.BroId)------",self.BroId)
            self.EquipEvent:Action(cell:GetData(),self.BroId)
            if self.BroId then
                self.BroId=nil
                self:Hide()
            end
        end

    end);


    --标记所有被删除的
    CallBackManager:AddRbxConnect(self,self.insts.delete.selectAll.Activated, function()
        self.ListUi:selectAll2Remove()
        self:UpdateRemoveCount()

    end);
    -------------------------状态切换触发-------------------------------------

    --正常状态--->删除状态
    CallBackManager:AddRbxConnect(self,self.insts.normal.delete.Activated, function()
           self:EnterDelete()
           self.ListUi:Big()
           self:UpdateRemoveCount()
    end);

    --删除状态--->正常状态
    CallBackManager:AddRbxConnect(self,self.insts.delete.cancel.Activated, function()
        self.ListUi:ClearRemove()
        self:EnterNormal()
        self:UpdateRemoveCount()
    end);




end;



function M.dtor(self)
	M.super.dtor(self);
end;


--更新武器数据
function M.UpdateData(self,data)
    for k,v in pairs(data) do
        if  not self.ListUi:IshadData(v) then
            local ui=self.insts.cellPerfab:Clone()
            ui.Parent=self.insts.cellPerfab.Parent
            ui.Visible=true
            self.ListUi:AddCell(ui,v)
        end
    end
end

--筛选列表，cell为空，表示不筛选
function M.FilterByCell(self,cell)
    self.ListUi:FilterByCell(cell)
end

--进入正常显示信息状态
function M.EnterNormal(self)
    self.state=1 -- 常规状态

    self:SetNormalShow(true)
    self:SetDeleteShow(false)
    self.ListUi:Big() --列表变大
end


--进入删除状态
function M.EnterDelete(self)
    self.state=0 --删除状态

    self:SetNormalShow(false)
    self:SetDeleteShow(true)

    self.InfoUi:Close() --关闭信息显示
    self.ListUi:Big() --列表变大
end

function M.SetDeleteShow(self,isShow)
    self.insts.delete.root.Visible=isShow
end

function M.SetNormalShow(self,isShow)
    self.insts.normal.root.Visible=isShow
    -- self.InfoUi:SetNormalUiShow(isShow)
end


--单元被点击
function M.CellClick(self,cell)

    if self.state==1 then -- 常规状态：展示武器信息
        if cell:IsSelete() then
            self.InfoUi:Close() --关闭信息显示
            self.ListUi:Big() --列表变大
        else
            self.InfoUi:Show(cell)-- 显示cell信息
            self.ListUi:Small() --列表变小
        end
        
    elseif self.state==0 then--删除状态:打上删除标记
        -- self.ListUi:AddRemove(cell)
        self.ListUi:ChangeRemoveTagState(cell)
        self:UpdateRemoveCount()
    end

end

function M.UpdateRemoveCount(self)
    local count=self.ListUi:GetRemoveTagCount()
    if count>0 then
        self.insts.delete.num.Text=string.format(self.numOldText.."(%s)",count)
    else
        self.insts.delete.num.Text=self.numOldText
    end
end


function M.FullUserInfo(self,userId)
    PlayerInfoHelper.GetPlayerInfo(userId,function(head,name)
        self.insts.UserIcon.Image =head
        self.insts.UserName.Text =name
    end)
end

--是否允许删除
function M.RemoveIsShow(self,isShow)
    self.insts.delete.root.Visible=isShow
    self.insts.normal.root.Visible=isShow
end

function M.OnShow(self,userId,broId)

    -- print("-------OnShow--------------",userId,broId)
    userId=userId or game.Players.LocalPlayer.UserId
    self.BroId=broId

    self:FullUserInfo(userId)
    self:EnterNormal()
    if  self.BroId~=nil then --好友打开武器
        self:RemoveIsShow(false) 
    end
end




function M.changeBroId(self,userId,broId)

    if not userId or not broId then
        return 
    end

    if not self.main_inst.Enabled then
        return 
    end

    if self.BroId==broId  then
        return 
    end

    self.BroId=broId

    self:FullUserInfo(userId)
end

return M